package service;

import java.util.Map;

import bean.MessageForRecord;
import bean.MessageForRepairer;
import bean.MessageForSimple;
import bean.MessageForSimpleList;
import bean.MessageForSos;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PartMap;
import retrofit2.http.Query;

/**
 * author：wangqi on 2017/5/4 16:39
 * email：773630555@qq.com
 */

public interface ApiService {
    /**
     *用户登录
     * @param account 用户名
     * @param password 密码
     * @return
     */
    @POST("app/user/login")
    Call<MessageForSimple> login(@Query("account") String account, @Query("password") String password);

    /**
     * 检查账号是否能使用
     * @param account 手机号
     * @return
     */
    @POST("app/user/checkTelephone")
    Call<MessageForSimple> checkTelephone(@Query("account") String account);

    /**
     * 开通-验证码
     * @param account 开通-验证码
     * @param module 注册：reg 重置密码 resetpassword
     * @return
     */
    @POST("app/user/generateSMSCode")
    Call<MessageForSimple> generateSMSCode(@Query("account") String account, @Query("module") String module);

    /**
     * 新用户开通步骤
     * @param account 手机号
     * @param smscode 短信验证码
     * @param password 字符密码
     * @return
     */
    @POST("app/user/logon")
    Call<MessageForSimple> logon(@Query("account") String account, @Query("smscode") String smscode, @Query("password") String password);

    /**
     * 忘记密码
     * @param account 手机号
     * @param smscode 短信验证码
     * @param password 字符密码
     * @return
     */
    @POST("app/user/forgotPassWord")
    Call<MessageForSimple> forgotPassWord(@Query("account") String account, @Query("smscode") String smscode, @Query("password") String password);

    /**
     * 获取当前坐标
     * @param token Header Token
     * @param deviceid 设备id
     * @return
     */
    @POST("app/map/getCurrentTrack")
    Call<MessageForSimple> getCurrentTrack(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid);

    /**
     * 获取设备类型
     * @param token Header Token
     * @return
     */
    @POST("app/device/getDeviceTypes")
    Call<MessageForSimple> getDeviceTypes(@Header("X-Auth-Token") String token);

    /**
     * 添加设备
     * @param token
     * @param devicename 设备名字
     * @param deviceicon 设备类型  /app/device/deviceicon 输出的id
     * @param imei 设备IMEI号
     * @return
     */
    @POST("app/device/scanDevice")
    Call<MessageForSimple> scanDevice(@Header("X-Auth-Token") String token, @Query("devicename") String devicename, @Query("deviceicon") String deviceicon, @Query("imei") String imei);

    /**
     * 编辑设备信息
     * @param token
     * @param deviceid
     * @param devicename
     * @param devicetype
     * @return
     */
    @POST("app/device/saveDevice")
    Call<MessageForSimple> saveDevice(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("devicename") String devicename, @Query("deviceicon") String devicetype);

    /**
     * 获取设备列表
     * @param token Header Token
     * @return
     */
    @POST("app/device/getDevices")
    Call<MessageForSimpleList> getDevices(@Header("X-Auth-Token") String token);

    @POST("app/device/getDevice")
    Call<MessageForSimple> getDevice(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid);

    /**
     * 蓝牙防丢
     * @param token
     * @param deviceid 设备ID
     * @param bluetooth 0/1或者true/false
     * @return
     */
    @POST("app/device/changeBluetooth")
    Call<MessageForSimple> changeBluetooth(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("bluetooth") String bluetooth);

    /**
     * 设备解绑
     * @param token
     * @param deviceid 设备ID
     * @return
     */
    @POST("app/device/unbind")
    Call<MessageForSimple> unbind(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid);

    /**
     * 录音命令
     * @param token
     * @param deviceid 设备ID
     * @param length 录音时长
     * @return
     */
    @POST("app/command/audio")
    Call<MessageForSimple> audio(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("length") String length);

    /**
     * 删除围栏
     * @param token
     * @param deviceid 设备ID
     * @param regionids 围栏ID 多个用逗号分隔
     * @return
     */
    @POST("app/map/deleteSafeRegions")
    Call<MessageForSimple> deleteSafeRegions(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("regionids") String regionids);

    /**
     * 获取围栏列表
     * @param token
     * @param deviceid 设备ID
     * @return
     */
    @POST("app/map/getSafeRegions")
    Call<MessageForSimpleList> getSafeRegions(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid);

    /**
     * 添加或编辑围栏
     * @param token
     * @param deviceid 设备ID
     * @param regionid 通过此值判断是否添加
     * @param centerlng 中点经度
     * @param centerlat 中点纬度
     * @param radius 半径
     * @param name 安全区域名字
     * @param address 经纬度对应的地址
     * @param inalarm 进入 0/1或false/true
     * @param outalarm 离开 0/1或false/true
     * @return
     */
    @POST("app/map/saveSafeRegion")
    Call<MessageForSimple> saveSafeRegion(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("regionid") String regionid, @Query("centerlng") String centerlng, @Query("centerlat") String centerlat, @Query("radius") String radius, @Query("name") String name, @Query("address") String address, @Query("inalarm") String inalarm, @Query("outalarm") String outalarm);

    /**
     * 录音列表
     * @param token
     * @param deviceid 设备ID
     * @param pageindex 第几页
     * @param pagesize 每页加载数量
     * @return
     */
    @POST("app/media/getAudioes")
    Call<MessageForRecord> getAudioes(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("pageindex") String pageindex, @Query("pagesize") String pagesize);

    /**
     * 意见反馈
     * @param token
     * @param question 问题内容
     * @param AppVersion App版本
     * @param DeviceModel 设备型号
     * @param OSVersion 设备系统版本
     * @return
     */
    @POST("app/feedback/put")
    Call<MessageForSimple> put(@Header("X-Auth-Token") String token, @Query("question") String question, @Query("AppVersion") String AppVersion, @Query("DeviceModel") String DeviceModel, @Query("OSVersion") String OSVersion);

    /**
     * 获取个人信息
     * @param token
     * @return
     */
    @POST("app/user/getUserinfo")
    Call<MessageForSimple> getUserinfo(@Header("X-Auth-Token") String token);

    /**
     * 上传头像
     * @param token
     * @param params 文件打包
     * @return
     */
    @Multipart
    @POST("app/user/saveHeadImg")
    Call<MessageForSimple> saveHeadImg(@Header("X-Auth-Token") String token, @PartMap Map<String, RequestBody> params);

    /**
     * 保存用户资料
     * @param token
     * @param username 用户名
     * @return
     */
    @POST("/app/user/save")
    Call<MessageForSimple> save(@Header("X-Auth-Token") String token, @Query("username") String username);

    /**
     * 设置警报开关
     * @param token
     * @param module module:低电报警 拆卸报警 位移报警 断电报警 震动报警 超速报警 SOS报警
     * @param value 开关 0/1或false/true
     * @return
     */
    @POST("app/alarm/setting")
    Call<MessageForSimple> setting(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("module") String module, @Query("value") String value);

    /**
     * 报警列表
     * @param token
     * @param pageindex 第几页
     * @param pagesize 每页加载数量
     * @return
     */
    @POST("app/alarm/getAllAlarms")
    Call<MessageForSos> getAllAlarms(@Header("X-Auth-Token") String token, @Query("pageindex") String pageindex, @Query("pagesize") String pagesize);

    /**
     * 报警列表 按设备查询
     * @param token
     * @param pageindex 第几页
     * @param pagesize 每页加载数量
     * @return
     */
    @POST("app/alarm/getAllAlarms")
    Call<MessageForSos> getAllAlarmsForDevice(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("pageindex") String pageindex, @Query("pagesize") String pagesize);

    /**
     * 应用内部更改密码
     * @param token
     * @param oldpassword
     * @param password
     * @return
     */
    @POST("app/user/setPassWord")
    Call<MessageForSimple> setPassWord(@Header("X-Auth-Token") String token, @Query("oldpassword") String oldpassword, @Query("password") String password);

    /**
     * 获取报警状态
     * @param token
     * @param deviceid
     * @return
     */
    @POST("app/alarm/getsetting")
    Call<MessageForSimple> getsetting(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid);

    /**
     * 删除报警信息
     * @param token
     * @param alarmids
     * @return
     */
    @POST("app/alarm/deleteAlarms")
    Call<MessageForSimple> deleteAlarms(@Header("X-Auth-Token") String token, @Query("alarmids") String alarmids);

    /**
     * 删除录音信息
     * @param token
     * @param id
     * @return
     */
    @POST("app/media/audio/del")
    Call<MessageForSimple> del(@Header("X-Auth-Token") String token, @Query("id") String id);

    /**
     * 套餐列表
     * @param token
     * @return
     */
    @POST("/app/package/get")
    Call<MessageForSimpleList> get(@Header("X-Auth-Token") String token);

    /**
     * 流量购买获取订单
     * @param token
     * @param deviceid
     * @param packageid 套餐ID
     * @param payment alipay/wechat
     * @return
     */
    @POST("app/device/recharge")
    Call<MessageForSimpleList> recharge(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("packageid") String packageid, @Query("payment") String payment);

    /**
     * 获取APP版本号
     * @param type
     * @param platform
     * @return
     */
    @POST("app/system/getVersion")
    Call<MessageForSimple> getVersion(@Query("type") String type,@Query("platform") String platform);

    /**
     * 获取历史轨迹
     * @param token Header Token
     * @return
     */
    @POST("app/map/getTracks")
    Call<MessageForSimpleList> getTracks(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("starttime") String starttime, @Query("endtime") String endtime);

    /**
     * 设防 卸防
     * @param token
     * @param value 开关 0/1或false/true
     * @return
     */
    @POST("app/device/setDefence")
    Call<MessageForSimple> setDefence(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("value") String value);
    /**
     * 解除报警
     * @param token
     * @param value 开关 0/1或false/true
     * @return
     */
    @POST("app/device/setExitAlarm")
    Call<MessageForSimple> setExitAlarm(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("value") String value);

    /**
     * 工作模式
     * @param token
     * @param deviceid
     * @param mode 1省电模式 2定时定位模式 3待机模式
     * @param interval 定时定位模式和省电模式传
     * @param waketime 省电模式传
     * @return
     */
    @POST("app/device/setMode")
    Call<MessageForSimple> setMode(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid, @Query("mode") String mode, @Query("interval") String interval, @Query("waketime") String waketime);
    /**
     * 获取设防等信息
     * @param token
     * @param deviceid
     * @return
     */
    @POST("app/device/getsetting")
    Call<MessageForSimple> devicegetsetting(@Header("X-Auth-Token") String token, @Query("deviceid") String deviceid);

    /**
     * 修理商列表
     * @param token
     * @param name 修理商名字 搜素时传
     * @param lng 经度
     * @param lat 纬度
     * @param pageindex 页码
     * @param pagesize 每页数据个数
     * @return
     */
    @POST("app/repairer/list")
    Call<MessageForRepairer> repairerList(@Header("X-Auth-Token") String token, @Query("name") String name, @Query("lng") String lng, @Query("lat") String lat, @Query("pageindex") String pageindex, @Query("pagesize") String pagesize);

    /**
     * 门店列表
     * @param token
     * @return
     */
    @POST("app/shop/list")
    Call<MessageForSimpleList> shopList(@Header("X-Auth-Token") String token);

    /**
     * 品牌列表
     * @param token
     * @return
     */
    @POST("app/brand/list")
    Call<MessageForSimpleList> brandList(@Header("X-Auth-Token") String token);

    /**
     * 警察列表
     * @param token
     * @return
     */
    @POST("app/police/list")
    Call<MessageForSimpleList> policeList(@Header("X-Auth-Token") String token);

    /**
     * 厂商列表
     * @param token
     * @return
     */
    @POST("app/producer/list")
    Call<MessageForSimpleList> producerList(@Header("X-Auth-Token") String token);

    /**
     * 物业列表
     * @param token
     * @return
     */
    @POST("app/property/list")
    Call<MessageForSimpleList> propertyList(@Header("X-Auth-Token") String token);

    /**
     * 添加电瓶车设备
     * @param token
     * @param name
     * @param platenumber
     * @param shopid
     * @param brandid
     * @param model
     * @param color
     * @param vinnumber
     * @param motornumber
     * @param dis
     * @param sign
     * @param propertyid
     * @param policeid
     * @param producerid
     * @return
     */
    @POST("app/device/put")
    Call<MessageForSimple> devicePut(@Header("X-Auth-Token") String token,@Query("name") String name,@Query("platenumber") String platenumber,@Query("shopid") String shopid,@Query("brandid") String brandid,@Query("model") String model,@Query("color") String color,@Query("vinnumber") String vinnumber,@Query("motornumber") String motornumber,@Query("dis") String dis,@Query("sign") String sign,@Query("propertyid") String propertyid,@Query("policeid") String policeid,@Query("producerid") String producerid);

    /**
     * 删除电动车
     * @param token
     * @param deviceid
     * @return
     */
    @POST("app/device/del")
    Call<MessageForSimple> deviceDel(@Header("X-Auth-Token") String token,@Query("deviceid") String deviceid);

    /**
     * 修改设备
     * @param token
     * @param name
     * @param platenumber
     * @param shopid
     * @param brandid
     * @param model
     * @param color
     * @param vinnumber
     * @param motornumber
     * @param dis
     * @param sign
     * @param propertyid
     * @param policeid
     * @param producerid
     * @return
     */
    @POST("app/device/set")
    Call<MessageForSimple> deviceSet(@Header("X-Auth-Token") String token,@Query("deviceid") String deviceid,@Query("name") String name,@Query("platenumber") String platenumber,@Query("shopid") String shopid,@Query("brandid") String brandid,@Query("model") String model,@Query("color") String color,@Query("vinnumber") String vinnumber,@Query("motornumber") String motornumber,@Query("dis") String dis,@Query("sign") String sign,@Query("propertyid") String propertyid,@Query("policeid") String policeid,@Query("producerid") String producerid);

    /**
     * 更改imei
     * @param token
     * @param deviceid
     * @param imei
     * @return
     */
    @POST("app/device/setimei")
    Call<MessageForSimple> setimei(@Header("X-Auth-Token") String token,@Query("deviceid") String deviceid,@Query("imei") String imei);

    /**
     * 上传头像
     * @param token
     * @param params 文件打包
     * @return
     */
    @Multipart
    @POST("app/device/saveImg")
    Call<MessageForSimple> saveImg(@Header("X-Auth-Token") String token, @PartMap Map<String, RequestBody> params);
}
